package com.lingjtx.gateway.filter;

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

@Component
@Order(10)
public class GlobalHttpFilter implements GlobalFilter {

    // 1. 统一请求日志记录  记录请求的 URL、Headers、Body，便于后续分析。可以在请求返回时，记录 响应状态码和时延，方便监控网关性能。
    // 2. 统一限流  结合 Redis + Token Bucket 算法，对 API 进行限流，防止 DDoS 攻击。例如：同一个 IP 每秒最多访问 10 次，否则返回 429 Too Many Requests
    // 3. 统一请求参数处理  修改 Header：可在请求转发到下游服务前 添加/删除/修改 Header。URL 重写：可以动态修改请求 URL。
    // 4. 缓存优化  对部分请求结果进行缓存，避免重复访问下游服务。比如：访问数据字典等

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

        return chain.filter(exchange);
    }
}
